package br.com.leopard.erp.gym.dao.empresa;

import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import br.com.leopard.erp.gym.exception.NenhumResultadoEncontradoException;
import br.com.leopard.erp.gym.mapeamento.cad.PessoaFisica;
import br.com.leopard.erp.gym.mapeamento.empresa.Empresa;
import br.com.leopard.erp.gym.persistence.AbstractDAO;
import br.com.leopard.erp.gym.persistence.ParametroQueryBuilder;
import br.com.leopard.erp.gym.persistence.ParametroUtils;

@Stateless
@LocalBean
public class EmpresaDAO extends AbstractDAO<Empresa, Long> {

	public EmpresaDAO() {
		super(Empresa.class);
	}

	public Empresa getPorCNPJ(String cnpj) throws NenhumResultadoEncontradoException {
		String query = "Empresa.listarPessoaPorCNPJ";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("cnpj", cnpj);

		return super.getSingleObject(query, builder.getParametros());
	}

	public List<Empresa> getPorProprietario(PessoaFisica pessoa) {
		String query = "Empresa.findByProprietario";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("proprietario", pessoa);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public List<Empresa> getPorNomeEmpresa(String nomeEmpresa) {
		String query = "Empresa.findByNomeEmpresa";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("nomeEmpresa", nomeEmpresa);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public List<Empresa> getPorCNPJEIDDiferenteDe(String cnpj, Long idEmpresa) {
		String query = "Empresa.findByCNPJEIDDiferenteDe";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("cnpj", cnpj);
		builder.addParametro("idEmpresa", idEmpresa);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public List<Empresa> getPorNomeEmpresaEIDDiferenteDe(String nomeEmpresa, Long idEmpresa) {
		String query = "Empresa.findByNomeEmpresaEIDDiferenteDe";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("nomeEmpresa", nomeEmpresa);
		builder.addParametro("idEmpresa", idEmpresa);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public List<Empresa> ListAllExceptIDs(Long... ids) {
		String query = "Empresa.findByNomeEmpresaEIDDiferenteDe";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("ids", ParametroUtils.converterParaIn(ids));

		return super.listNamedQuery(query, builder.getParametros());
	}

}
